#ifndef _IOCONFIG_H
#define _IOCONFIG_H
#include "stm32f7xx.h"                  // Device header
#include "sys.h"
#include "main.h"
#include "delay.h"
#include "usart.h"

//-------------------------------------------------------------
#define LED1Periph_GPIO				GPIOC
#define LED1						GPIO_PIN_13
#define LED2Periph_GPIO				GPIOC
#define LED2						GPIO_PIN_14
//VI_TEST_MODE
#define LED3Periph_GPIO				GPIOG
#define LED3						GPIO_PIN_5

#define LED4Periph_GPIO				GPIOG
#define LED4						GPIO_PIN_9
#define LED5Periph_GPIO				GPIOG
#define LED5						GPIO_PIN_10

#define LED_HIGH						HAL_GPIO_WritePin( LED1Periph_GPIO,  LED1,GPIO_PIN_SET)
#define LED_LOW							HAL_GPIO_WritePin( LED1Periph_GPIO,  LED1,GPIO_PIN_RESET)

#define LED2_HIGH						HAL_GPIO_WritePin( LED2Periph_GPIO,  LED2,GPIO_PIN_SET)
#define LED2_LOW						HAL_GPIO_WritePin( LED2Periph_GPIO,  LED2,GPIO_PIN_RESET)

#define LED3_HIGH						HAL_GPIO_WritePin( LED3Periph_GPIO,  LED3,GPIO_PIN_SET)
#define LED3_LOW						HAL_GPIO_WritePin( LED3Periph_GPIO,  LED3,GPIO_PIN_RESET)

#define LED4_HIGH						HAL_GPIO_WritePin( LED4Periph_GPIO,  LED4,GPIO_PIN_SET)
#define LED4_LOW						HAL_GPIO_WritePin( LED4Periph_GPIO,  LED4,GPIO_PIN_RESET)

#define LED5_HIGH						HAL_GPIO_WritePin( LED5Periph_GPIO,  LED5,GPIO_PIN_SET)
#define LED5_LOW						HAL_GPIO_WritePin( LED5Periph_GPIO,  LED5,GPIO_PIN_RESET)
//-------------------------------------------------------------------------------------
#define KEY_OK						GPIO_PIN_1
#define KEY_OKPeriph_GPIO			GPIOE
#define KEY_DOWN					GPIO_PIN_6
#define KEY_DOWNPeriph_GPIO			GPIOD
#define KEY_UP						GPIO_PIN_15
#define KEY_UPPeriph_GPIO			GPIOA
#define KEY_DEBUG					GPIO_PIN_4
#define KEY_DEBUGPeriph_GPIO		GPIOB

#define KEY_OK_STATE			HAL_GPIO_ReadPin(KEY_OKPeriph_GPIO,KEY_OK)  //KEY按键 OK
#define KEY_DOWN_STATE			HAL_GPIO_ReadPin(KEY_DOWNPeriph_GPIO,KEY_DOWN)  //KEY按键 DOWN
#define KEY_UP_STATE			HAL_GPIO_ReadPin(KEY_UPPeriph_GPIO,KEY_UP) //KEY按键 UP
#define KEY_DEBUG_STATE			HAL_GPIO_ReadPin(KEY_DEBUGPeriph_GPIO,KEY_DEBUG)  //KEY按键 DEBUG
//----------------------------------------------------------------------------------
#define SSD_RESET						GPIO_PIN_11
#define SSD_RESETPeriph_GPIO			GPIOF

#define USB_RESET						GPIO_PIN_1
#define USB_RESETPeriph_GPIO			GPIOC

#define Load_done						GPIO_PIN_4
#define Load_donePeriph_GPIO			GPIOC
//------------PCB版本选择------------------------------------------------------------------------------
#define _SSD2828_2KS
#define SSD2832_2KS

#ifdef SSD2828_2KS
//VBAT 电压控制
#define RT8082_EN					    GPIO_PIN_0
#define RT8082_ENPeriph_GPIO			GPIOA
//ARM_FPGA_1
#define FPGA_Fifo0Reset 				GPIO_PIN_13
#define FPGA_Fifo0ResetPeriph_GPIO		GPIOF
//ARM_FPGA_2
#define FPGA_ID0						GPIO_PIN_14
#define FPGA_IDPeriph_GPIO				GPIOF
//ARM_FPGA_3
#define FPGA_CMD_LOGIC				  	GPIO_PIN_15
#define FPGA_CMD_LOGICPeriph_GPIO		GPIOF
//#define FPGA_Fifo0Wen 				GPIO_PIN_15
//#define FPGA_Fifo0WenPeriph_GPIO		GPIOF

#elif defined (SSD2832_2KS)
//VBAT 电压控制
#define RT8082_EN					    GPIO_PIN_0
#define RT8082_ENPeriph_GPIO			GPIOG
//ARM_FPGA_1
#define FPGA_Fifo0Reset 				GPIO_PIN_0
#define FPGA_Fifo0ResetPeriph_GPIO		GPIOA
//ARM_FPGA_2
#define FPGA_ID0						GPIO_PIN_6
#define FPGA_IDPeriph_GPIO				GPIOE
//ARM_FPGA_3
#define FPGA_CMD_LOGIC				  	GPIO_PIN_5
#define FPGA_CMD_LOGICPeriph_GPIO		GPIOE
//#define FPGA_Fifo0Wen 				GPIO_PIN_5
//#define FPGA_Fifo0WenPeriph_GPIO		GPIOE
#else

#endif

//--------------------------------------------------
#define SHUTSSD2828				  	GPIO_PIN_15
#define SHUTSSD2828Periph_GPIO		GPIOB

#define FPGA_Reset						GPIO_PIN_5
#define FPGA_ResetPeriph_GPIO			GPIOC

#define OLED_RESET						GPIO_PIN_15
#define OLED_ResetPeriph_GPIO			GPIOG
//CMD/VIDEO 模式切换
#define IF_Sel1						    GPIO_PIN_14
#define IF_SelPeriph_GPIO			    GPIOG
//-----------------------------------------------------
//OLED Power IC 控制
#define FDEN						   	GPIO_PIN_7
#define FD_ENPeriph_GPIO			    GPIOG

#define VCI_EN							GPIO_PIN_0
#define VCI_ENPeriph_GPIO				GPIOE

#define VDDIO_EN						GPIO_PIN_7
#define VDDIO_ENPeriph_GPIO				GPIOD

#define DVDD_EN		    			    GPIO_PIN_3 
#define DVDD_ENPeriph_GPIO				GPIOB

#define VCI_TC1							GPIO_PIN_14 //控制 VCI 电流测试 mA/uA切档
#define VCI_TC1_ENPeriph_GPIO			GPIOB

#define VDDIO_TC1				    	GPIO_PIN_6 //控制 VDDIO 电流测试 mA/uA切档
#define VDDIO_TC1_ENPeriph_GPIO			GPIOC

#define TXS0108_EN			    		GPIO_PIN_7 //控制SPI 接口电平转换芯片使能
#define TXS0108_ENPeriph_GPIO		GPIOA
//--------------------------------------------
#define MIPI_DPHY_CPHY_SEL				GPIO_PIN_3
#define MIPI_DPHY_CPHY_SEL_GPIO			GPIOD
//--------------------------------------------------------------------------
#define SHUTSSD2828_HIGH				HAL_GPIO_WritePin( SHUTSSD2828Periph_GPIO,  SHUTSSD2828 ,GPIO_PIN_SET)
#define SHUTSSD2828_LOW					HAL_GPIO_WritePin( SHUTSSD2828Periph_GPIO,  SHUTSSD2828, GPIO_PIN_RESET)

#define RT8082_EN_HIGH					HAL_GPIO_WritePin( RT8082_ENPeriph_GPIO,  RT8082_EN ,GPIO_PIN_SET)
#define RT8082_EN_LOW					HAL_GPIO_WritePin( RT8082_ENPeriph_GPIO,  RT8082_EN, GPIO_PIN_RESET)

#define FD_EN_HIGH						HAL_GPIO_WritePin( FD_ENPeriph_GPIO,  FDEN ,GPIO_PIN_SET)
#define FD_EN_LOW						HAL_GPIO_WritePin( FD_ENPeriph_GPIO,  FDEN,GPIO_PIN_RESET)

#define Load_done_HIGH					HAL_GPIO_WritePin( Load_donePeriph_GPIO,  Load_done ,GPIO_PIN_SET)
#define Load_done_LOW					HAL_GPIO_WritePin( Load_donePeriph_GPIO,  Load_done,GPIO_PIN_RESET)

//#define FPGA_Fifo0Wen_HIGH			HAL_GPIO_WritePin( FPGA_Fifo0WenPeriph_GPIO,  FPGA_Fifo0Wen ,GPIO_PIN_SET)
//#define FPGA_Fifo0Wen_LOW				HAL_GPIO_WritePin( FPGA_Fifo0WenPeriph_GPIO,  FPGA_Fifo0Wen,GPIO_PIN_RESET)

#define FPGA_Fifo0Reset_HIGH		HAL_GPIO_WritePin( FPGA_Fifo0ResetPeriph_GPIO,  FPGA_Fifo0Reset ,GPIO_PIN_SET)
#define FPGA_Fifo0Reset_LOW			HAL_GPIO_WritePin( FPGA_Fifo0ResetPeriph_GPIO,  FPGA_Fifo0Reset ,GPIO_PIN_RESET)

#define SSD_RESET_HIGH				HAL_GPIO_WritePin( SSD_RESETPeriph_GPIO,	SSD_RESET,GPIO_PIN_SET)
#define SSD_RESET_LOW				HAL_GPIO_WritePin( SSD_RESETPeriph_GPIO,	SSD_RESET,GPIO_PIN_RESET)

#define OLED_RESET_HIGH				HAL_GPIO_WritePin( OLED_ResetPeriph_GPIO,	OLED_RESET,GPIO_PIN_SET)
#define OLED_RESET_LOW				HAL_GPIO_WritePin( OLED_ResetPeriph_GPIO,	OLED_RESET,GPIO_PIN_RESET)

#define USB_RESET_HIGH				HAL_GPIO_WritePin( USB_RESETPeriph_GPIO,	USB_RESET,GPIO_PIN_SET)
#define USB_RESET_LOW				HAL_GPIO_WritePin( USB_RESETPeriph_GPIO,	USB_RESET,GPIO_PIN_RESET)

#define FPGA_RESET_HIGH				HAL_GPIO_WritePin( FPGA_ResetPeriph_GPIO,	FPGA_Reset,GPIO_PIN_SET)
#define FPGA_RESET_LOW				HAL_GPIO_WritePin( FPGA_ResetPeriph_GPIO,	FPGA_Reset,GPIO_PIN_RESET)

#define IF_Sel1_Cmd					HAL_GPIO_WritePin( IF_SelPeriph_GPIO,  IF_Sel1,GPIO_PIN_SET)
#define IF_Sel1_Video				HAL_GPIO_WritePin( IF_SelPeriph_GPIO,  IF_Sel1,GPIO_PIN_RESET)

#define TEST_MODE0_CPHY				HAL_GPIO_WritePin( MIPI_DPHY_CPHY_SEL_GPIO,  MIPI_DPHY_CPHY_SEL,GPIO_PIN_RESET) //0:mipi cphy output is selected
#define TEST_MODE0_DPHY				HAL_GPIO_WritePin( MIPI_DPHY_CPHY_SEL_GPIO,  MIPI_DPHY_CPHY_SEL,GPIO_PIN_SET)  //1:mipi dphy output is selected

#define VCI_T_C_HIGH				HAL_GPIO_WritePin( VCI_TC1_ENPeriph_GPIO,	VCI_TC1,GPIO_PIN_SET)
#define VCI_T_C_LOW					HAL_GPIO_WritePin( VCI_TC1_ENPeriph_GPIO,	VCI_TC1,GPIO_PIN_RESET)

#define VDDIO_T_C_HIGH				HAL_GPIO_WritePin( VDDIO_TC1_ENPeriph_GPIO,	VDDIO_TC1,GPIO_PIN_SET)
#define VDDIO_T_C_LOW				HAL_GPIO_WritePin( VDDIO_TC1_ENPeriph_GPIO,	VDDIO_TC1,GPIO_PIN_RESET)

#define VCI_EN_HIGH					HAL_GPIO_WritePin( VCI_ENPeriph_GPIO,	VCI_EN,GPIO_PIN_SET)		
#define VCI_EN_LOW					HAL_GPIO_WritePin( VCI_ENPeriph_GPIO,	VCI_EN,GPIO_PIN_RESET)	

#define VDDIO_EN_HIGH				HAL_GPIO_WritePin( VDDIO_ENPeriph_GPIO,	VDDIO_EN,GPIO_PIN_SET)		
#define VDDIO_EN_LOW				HAL_GPIO_WritePin( VDDIO_ENPeriph_GPIO,	VDDIO_EN,GPIO_PIN_RESET)	

#define DVDD_EN_HIGH				HAL_GPIO_WritePin( DVDD_ENPeriph_GPIO,	DVDD_EN,GPIO_PIN_SET)	 //1.1~1.3v RAM电压	
#define DVDD_EN_LOW					HAL_GPIO_WritePin( DVDD_ENPeriph_GPIO,	DVDD_EN,GPIO_PIN_RESET)	

#define TXS0108_EN_HIGH			    HAL_GPIO_WritePin( TXS0108_ENPeriph_GPIO,	TXS0108_EN,GPIO_PIN_SET)	 
#define TXS0108_EN_LOW			    HAL_GPIO_WritePin( TXS0108_ENPeriph_GPIO,	TXS0108_EN,GPIO_PIN_RESET)

#define MCU_LOGIC_EN_HIGH			HAL_GPIO_WritePin( FPGA_CMD_LOGICPeriph_GPIO,	FPGA_CMD_LOGIC,GPIO_PIN_SET)	 
#define MCU_LOGIC_EN_LOW			HAL_GPIO_WritePin( FPGA_CMD_LOGICPeriph_GPIO,	FPGA_CMD_LOGIC,GPIO_PIN_RESET)

void LED_IO_init(void);
void IF_Sel_init(void);

u8 FPGA_ID_Gain(void);
void FPGA_CMD_LOGIC_init(void);
void BUTTON_IO_init(void);
void EXTIInit(void);
void EXIT_Enable(u8 status);
void Other_IO_init(void);
void FPGA_ResetProcess(void);
void HardWare_Init(void);

#endif

